﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace BLL.Concrete
{
    public class CasoBll: BllConnection
    {
        public IQueryable<DataAccess.Caso> GetCasos()
        {
            return db.Casos;
        }

        public DataAccess.Caso GetCaso(int id)
        {
            return GetCasos().Single(u => u.Id == id);
        }

        public IQueryable<DataAccess.CasoRotativo> GetCasosRotativos()
        {
            return db.CasoRotativos;
        }

        public void EliminarCaso(int idCaso)
        {
            ImagenBll imagenBll = new ImagenBll();

            var galeria = GetCasosRotativos().Where(u => u.IdCaso == idCaso);
            var idImagenes = galeria.Select(u => u.IdImagen).ToList();
            db.CasoRotativos.DeleteAllOnSubmit(galeria);
            
            var caso = GetCasos().Single(u => u.Id == idCaso);
            int idIMagen = caso.ImagenIndice;
            db.Casos.DeleteOnSubmit(caso);
            db.SubmitChanges();
            imagenBll.EliminarImagen(idIMagen);
            foreach (int idImg in idImagenes)
                imagenBll.EliminarImagen(idImg);
        }

        public int InsertCaso(string nombre, string descripcion, HttpPostedFileBase imagenIndice)
        {
            ImagenBll imageBll = new ImagenBll();
            int idImagen = imageBll.InsertImage(imagenIndice);

            DataAccess.Caso caso = new DataAccess.Caso
            {
                Descripcion = descripcion,
                Nombre = nombre,
                ImagenIndice = idImagen
            };
           
            db.Casos.InsertOnSubmit(caso);
            db.SubmitChanges();
            return caso.Id;
        }

        public void UpdateCaso(int idCaso,string nombre, string descripcion, HttpPostedFileBase imagenIndice)
        {
            DataAccess.Caso caso = db.Casos.Single(u => u.Id == idCaso);
            if (imagenIndice != null)
            {
                ImagenBll imagenBll = new ImagenBll();
                imagenBll.UpdateImagen(caso.ImagenIndice, imagenIndice);
            }
            caso.Nombre = nombre;
            caso.Descripcion = descripcion;
            db.SubmitChanges();
        }

        public void InsertImagenRotativo(int idCaso, int? orden, HttpPostedFileBase imagen)
        {
            ImagenBll imageBll = new ImagenBll();
            int idImagen = imageBll.InsertImage(imagen);

            int ord = orden == null ? 1 : orden.Value;

            DataAccess.CasoRotativo rot = new DataAccess.CasoRotativo
            {
                IdCaso = idCaso,
                Orden = ord,
                IdImagen = idImagen
            };

            db.CasoRotativos.InsertOnSubmit(rot);
            db.SubmitChanges();
        }

        public void EliminarImagenRotativo(int idImagenRotativo)
        {
            ImagenBll imagenBll = new ImagenBll();
            var imagenRotativo = GetCasosRotativos().Single(u => u.Id == idImagenRotativo);
            int idImagen = imagenRotativo.IdImagen;
            db.CasoRotativos.DeleteOnSubmit(imagenRotativo);
            db.SubmitChanges();

            imagenBll.EliminarImagen(idImagen);            
        }

        public void UpdateOrden(int idRot, int? orden)
        {
            int ord = orden == null ? 1 : orden.Value;
            DataAccess.CasoRotativo rot = db.CasoRotativos.Single(u => u.Id == idRot);
            rot.Orden = ord;
            db.SubmitChanges();
        }
    }
}
